home *** CD-ROM | disk | FTP | other *** search
-
- Free Information Xchange presents:
-
- Sci-Fi Pinball - CD crack by Static Vengeance - June 2nd, 1999
-
- REQUIREMENTS:
- Full game install
- W32Dasm & Hex Editor
-
- Fox Interactive has released a new pinball game with a collection of tables based on four of
- it's premier licensees. Games based on the Aliens series, the Predator series, The Fly movies and the
- TV series Buffy the Vampire Slayer. Each game includes sound clips and "dot-mation" movie clips from
- there respective series/story lines. The graphics are pretty good and the game play is fine as far as
- pinball games go. However there is one problem with this game and that is the CD check that is run
- before you can actually play the game. This is one problem that I can help you FiX with a little help
- from W32Dasm and a few comments. If you want to see how to track down the CD check, get W32Dasm up and
- running and disassemble the sci-fi pinball.exe file. Once you have done that, it's back to the ever
- popular method I've out-lined in so many of my tutorials.
- Go up to the menu bar and select REFS then data string refereneces from the drop down menu.
- When the pop-up box apears, grab the slider bar and scroll down until you see "Please put the Fox
- Arcade: Sci-Fi " which is part of the request dialog for the CD check. Double click this and you're
- right in the middle of the CD check, which looks like this:
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:00401BB3(U) <-- Gets here via the jump table
- |
- :00412940 83EC5C sub esp, 0000005C
- :00412943 8D4C2400 lea ecx, dword ptr [esp]
- :00412947 53 push ebx
- :00412948 33DB xor ebx, ebx
- :0041294A 53 push ebx
- :0041294B E830EB0100 call 00431480
- :00412950 8A442464 mov al, byte ptr [esp+64]
-
- * Possible StringData Ref from Data Obj ->"Gigawatt.bin" <-- File to read/check for
- |
- :00412954 6820DB4500 push 0045DB20
- :00412959 3AC3 cmp al, bl
- :0041295B 68E06D4600 push 00466DE0
- :00412960 8D4C240C lea ecx, dword ptr [esp+0C]
- :00412964 7458 je 004129BE
- :00412966 E8C5EE0100 call 00431830 <-- Read file with KERNEL32.ReadFile call
- :0041296B 84C0 test al, al <-- Test al for returned result
- :0041296D 756F jne 004129DE <-- Jump down to "pass & exit"
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:004129A8(C)
- |
- :0041296F 8D4C2404 lea ecx, dword ptr [esp+04]
- :00412973 E848EC0100 call 004315C0
-
- * Possible StringData Ref from Data Obj ->"Please put the Fox Arcade: Sci-Fi " <-- What got us here and
- ->"Pinball CD in your CD-ROM drive " <-- why we're doing this
- ->"and press OK. Otherwise press "
- ->"Cancel to quit the application."
- |
- :00412978 68A0DE4500 push 0045DEA0
-
- * Possible Reference to String Resource ID=00001: "Gigawatt Studios"
- |
- :0041297D 6A01 push 00000001
- :0041297F 6A30 push 00000030
- :00412981 FF151CF64500 call dword ptr [0045F61C]
- :00412987 83C40C add esp, 0000000C
- :0041298A 83F802 cmp eax, 00000002
- :0041298D 741D je 004129AC
-
- * Possible StringData Ref from Data Obj ->"Gigawatt.bin" <-- File to read/check for
- |
- :0041298F 6820DB4500 push 0045DB20
- :00412994 68E06D4600 push 00466DE0
- :00412999 8D4C240C lea ecx, dword ptr [esp+0C]
- :0041299D 895C2430 mov dword ptr [esp+30], ebx
- :004129A1 E88AEE0100 call 00431830 <-- Read file with KERNEL32.ReadFile call
- :004129A6 84C0 test al, al
- :004129A8 74C5 je 0041296F <-- Tell the user they need the CD
- :004129AA EB32 jmp 004129DE <-- Otherwise jump down to "pass & exit"
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:0041298D(C)
- |
- :004129AC 8D4C2404 lea ecx, dword ptr [esp+04]
- :004129B0 E8DBEB0100 call 00431590
- :004129B5 32C0 xor al, al <-- Set up for "failed" CD check
- :004129B7 5B pop ebx
- :004129B8 83C45C add esp, 0000005C
- :004129BB C20400 ret 0004 <-- Return to the caller
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:00412964(C)
- |
- :004129BE E86DEE0100 call 00431830 <-- Read file with KERNEL32.ReadFile call
- :004129C3 3AC3 cmp al, bl
- :004129C5 8D4C2404 lea ecx, dword ptr [esp+04]
- :004129C9 750E jne 004129D9
- :004129CB E8C0EB0100 call 00431590
- :004129D0 32C0 xor al, al <-- Set up for "failed" CD check
- :004129D2 5B pop ebx
- :004129D3 83C45C add esp, 0000005C
- :004129D6 C20400 ret 0004 <-- Return to the caller
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:004129C9(C)
- |
- :004129D9 E8E2EB0100 call 004315C0
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
- |:0041296D(C), :004129AA(U)
- |
- :004129DE 8D4C2404 lea ecx, dword ptr [esp+04]
- :004129E2 E8A9EB0100 call 00431590
- :004129E7 B001 mov al, 01 <-- Set up for "passed" CD check
- :004129E9 5B pop ebx
- :004129EA 83C45C add esp, 0000005C
- :004129ED C20400 ret 0004 <-- Return to the caller
-
- A simple and very short routine to check for the file Gigawatt.bin on the CD. The call to
- 431830 does a few things and sets up some information and then calls 435BC0 which is the routine that
- actually makes two KERNEL32.DLL calls. The first call is a ReadFile followed by a GetLastError which
- returns one or zero in eax depending on what happenned with the ReadFile call. To continue, the above
- routine will return a pass/fail value in al. A zero means the CD check failed, while a one in al means
- the CD check passed. Using this information we can trace back to the caller and bypass this CD check.
- If you check the code at and surounding 401BB3 you'll see this:
-
- -- Part of Large Jump Table --
- :00401BA9 E9320D0200 jmp 004228E0
- :00401BAE E9AD650100 jmp 00418160
-
- * Referenced by a CALL at Address:
- |:00412A4B <-- Got here via a single call instruction
- |
- :00401BB3 E9880D0100 jmp 00412940 <-- Jump to the CD check
-
- * Referenced by a CALL at Addresses:
- |:00402F21 , :0041F2F6
- |
- :00401BB8 E913030100 jmp 00411ED0
- :00401BBD E98E2E0100 jmp 00414A50
- :00401BC2 E9C9580000 jmp 00407490
- -- More of the Jump Table --
-
- A long list of jumps to routines, but we're in luck becuase there is a simple call made to this
- jump. So it's just a matter of looking at the code around 412A4B:
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:004017B2(U) <-- Gets here via the jump table
- |
- :00412A20 81ECB0000000 sub esp, 000000B0
- :00412A26 56 push esi
- :00412A27 8BF1 mov esi, ecx
-
- * Possible StringData Ref from Data Obj ->"\FoxPinball\1.0"
- |
- :00412A29 6898E04500 push 0045E098
- :00412A2E 8D4C2474 lea ecx, dword ptr [esp+74]
- :00412A32 E869230200 call 00434DA0
- :00412A37 8D4C2470 lea ecx, dword ptr [esp+70]
- :00412A3B E820240200 call 00434E60
- :00412A40 8BCE mov ecx, esi
- :00412A42 E829640200 call 00438E70
- :00412A47 6A01 push 00000001 <-- Remember this instruction
- :00412A49 8BCE mov ecx, esi
- :00412A4B E863F1FEFF call 00401BB3 <-- Call the CD check via jump table
- :00412A50 84C0 test al, al <-- Test al for result of the CD check
- :00412A52 751D jne 00412A71 <-- Take this jump to continue
- :00412A54 68030001E0 push E0010003
- :00412A59 8BCE mov ecx, esi
- :00412A5B E8B03F0200 call 00436A10
- :00412A60 8D4C2470 lea ecx, dword ptr [esp+70]
- :00412A64 E8C7230200 call 00434E30
- :00412A69 5E pop esi
- :00412A6A 81C4B0000000 add esp, 000000B0
- :00412A70 C3 ret <-- Getting here will quit to Windows 95/98
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:00412A52(C)
- |
- :00412A71 57 push edi <-- Getting here will continue with the game
- :00412A72 53 push ebx
- :00412A73 B9B09F4600 mov ecx, 00469FB0
- :00412A78 E8335E0200 call 004388B0
- :00412A7D 6A00 push 00000000
- :00412A7F B9B09F4600 mov ecx, 00469FB0
- -- Continuing Program Code --
-
- Well after a little information you can see the whole protection and CD check hinges on the
- jne at 412A52. Changing the call 00401BB3 to mov eax, 00000001 will completly bypass the CD check. If
- you make the edit and run the game, it will start up and quit right to windows before anything happens.
- We (well... I) missed something. Even after a lot of work and tracing the program code, I couldn't seem
- to get the game to run with or without the CD after making the edit. I even started looking for some
- type of checksumming routine that might check the exe file to see if it was editted. Nothing worked for
- me, so I took a break for a couple of days (got a new program to crack ;-) Then I decided it was time for
- another try, so I started over without my notes (you do take notes when you're cracking, right?) and tried
- again. I don't know what it was, but that push at 412A47 seemed to hit me between the eyes this time. I
- thought to myslef... "Hey, where are they fixing the stack for the push command?" Well they do, but it's
- adjusted for in the CD check call. So windows was choking on the fact with my edit an extra 32 bit value
- was left on the stack. So I changed the the 6A into a B0, which changes the push 00000001 to a mov al, 01
- instruction. Ran the game and it worked just fine without the CD online. All that work and effort becuase
- I wasn't paying attention!
- Getting back to the tutorial now. The only question left is what will be the final edit. You see
- as long as you get down to 412A71 and don't run the CD (or leave extra info on the stack) you can play the
- game. So you could change the push 00000001 to a "jump 00412A71" (6A 01 --> EB 28) or make the edits I have
- shown. I decided just to stick with my original edits. Once again, we have cracked another game and have
- finished another tutorial. The actual steps to crack this new pinball game are:
-
- 1. Do a full install of the game
- 2. Make the following edit:
-
- Edit Sci-Fi Pinball.exe at offset 73,287
- ========================================
- Search for: 6A 01 8B CE E8 63 F1 FE FF
- Change to : B0 -- -- -- B8 01 00 00 00
-
- 3. Enjoy your newly "CD-Free" Sci-Fi Pinball!
-
- A little lesson for me for future reference, but hey! Sci-Fi Pinball is now FiX'ed
-
- Static Vengeance - FiX
-